/*********************************************************************
 * stack的一般用法总结：
 * 1、什么是stack
 *    stack是一种先进后出的数据结构，没有迭代器对其进行轮训，只能遍历
 * 2、为什么需要stack
 *     stack对于那些需要从后向前遍历的场景，非常有用，比如撤销操作，撤销的
 *     操作只能从后向前进行
 * 3、如何使用stack
 *    stack只有如下几个接口使用：empty/size/pop/push/top/emplace/swap
 * ******************************************************************/
#include <stack>
#include "common.h"
using namespace std;

void show_val(stack<int> st)
{
    if (st.empty()) {
        return;
    }
    int len = st.size();
    printf("st size = %d\n", len);
    for (int i = 0; i< len; i++) {
        printf("%d\n", st.top());
        st.pop();
    }
}

int main()
{
    stack<int> st;
    for (int i = 0; i< 4; i++) {
        st.push(i);
        //st.emplace(i); //emplace和push都是向栈中添加元素，push是插入外部组装好的元素，emplace则是将元素拿进来自己组成成stack需要的形式
    }
    show_val(st);

    stack<int>st2;
    for (int i = 0; i< 5; i++) {
        st2.push(i + 10);
    }
    show_val(st2);

    printf("swap st st2 content!\n");
    st2.swap(st); // 交换两个栈的内容以及大小

    show_val(st);
    show_val(st2);

    return 0;
}